package com.heima.feigns;

import com.heima.config.HeimaFeignAutoConfiguration;
import com.heima.feigns.fallback.AdminFallback;
import com.heima.model.admin.pojos.AdChannel;
import com.heima.model.article.pojos.ApAuthor;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.search.vos.SearchArticleVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * @Author XHui
 * @Since 2024/2/13 20:39
 * @Version 1.0
 */
@FeignClient(
        value = "leadnews-admin", // 调用那个微服务
        fallbackFactory = AdminFallback.class, // 微服务保护措施
        configuration = HeimaFeignAutoConfiguration.class
)
public interface AdminFeign {

    /**
     * !!! TODO notes: 注意此处的返回值必须指定泛型，因为当feign调用微服务时，
     * 微服务会返回一个json类似的字符串，然后根据其反序列化为某个类型的对象，故必须指定泛型
     * 若不指定泛型，且返回的是一个json字符串 -> linkedHashMap
     * 若不指定泛型，且返回的是一个集合 -> JSON_ARRAY
     * 获取所有敏感词
     *
     * @return 响应结果<列表 < 字符串>>
     */
    @PostMapping("/api/v1/sensitive/sensitives")
    ResponseResult<List<String>> getAllSensitiveWords();


    // ================新增接口方法  start ================
    @GetMapping("/api/v1/channel/one/{id}")
    ResponseResult<AdChannel> findChannelById(@PathVariable Integer id);
    // ================新增接口方法  end ================

    /**
     * 获取所有频道信息
     *
     * @return 响应结果<广告渠道>
     */
    @GetMapping("/api/v1/channel/channels")
    ResponseResult<List<AdChannel>> getAllChannels();

}
